Amazon S3 Express One Zone へアクセスに必要な IAM ポリシーについて #AWSreInvent
Amazon S3 Express One Zone ディレクトリバケットへアクセスに必要な IAM ポリシーを紹介します。かの有名なAmazonS3FullAccess
の力を持ってしても S3 Express One Zone ディレクトリバケットへアクセスできません。これはどういうことなのでしょうか、みていきましょう。
Amazon S3 Express One Zone とは
re:Invent 2023 で発表された新しいストレージクラスです。S3 Standard と比べると耐久性を多少犠牲にして高パフォーマンスを実現したストレージクラスです。大量のデータを処理する AL/ML トレーニングや、ゲノム解析などのワークロードでは EC2 にマウントして使いたい場面があるのではないでしょうか。
S3 と S3 Express とでは名前空間が異なる
S3 と S3 Express は名前空間が別になっています。ここが大きなポイントです。
つまり、以下の IAM ポリシーですと S3 バケットにはフル権限でアクセスできても、S3 Express One Zone ディレクトリバケットにはアクセスできません。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*" } ] }
S3 バケットと、S3 Express One Zone ディレクトリバケットの双方にフル権限でアクセスするには、以下の様にs3express
に対するアクションも必要になります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "s3express:*" ], "Resource": "*" } ] }
比較しやすい様にあえてシンプルなポリシーの例示しています。一般的な利用用途でしたら S3/S3 Express のすべてに対してフル権限は強過ぎますので、Resource
で対象を絞るなり、アクションを細かく設定するなどセキュアな設定をご検討ください。
S3 フルアクセスの管理ポリシーはどうなっているのか
S3 に対してのフル権限でおなじみAmazonS3FullAccess
は S3 Express One Zone もカバーしているのでしょうか?
S3 Express One Zone はカバーされていません。仮にAmazonS3FullAccess
が付与されていても、S3 Express One Zone ディレクトリバケットにはアクセスできません。
参考: AmazonS3FullAccess
のポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "s3-object-lambda:*" ], "Resource": "*" } ] }
S3 フルアクセスというくらいだから S3 なんとかにはすべてアクセスできるのだろうと勝手に思っていたのですが、そうではありませんでした。
アクション一覧
s3express
の現在用意されているアクション一覧は下記になります。
- s3express:DeleteBucket
- s3express:DeleteBucketPolicy
- s3express:CreateBucket
- s3express:PutBucketPolicy
- s3express:GetBucketPolicy
- s3express:ListAllMyDirectoryBucket
- s3express:CreateSession
IAM ポリシー設定例
Mountpoint for Amazon S3 を使い EC2 にディレクトリバケットをマウントする際に必要だった IAM ポリシーを紹介します。詳細は以下のブログを参照ください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessRegionalEndpointAPIs", "Effect": "Allow", "Action": [ "s3express:DeleteBucket", "s3express:DeleteBucketPolicy", "s3express:CreateBucket", "s3express:PutBucketPolicy", "s3express:GetBucketPolicy", "s3express:ListAllMyDirectoryBuckets" ], "Resource": "arn:aws:s3express:us-east-1:123456789012:bucket/mountpoint-for-s3--use1-az4--x-s3/*" }, { "Sid": "AllowCreateSession", "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "*" } ] }
おわりに
「AmazonS3FullAccess
使っているのにアクセスできないです。」とお問い合わせがありそうなので書き残しました。私は S3 Express の検証していて権限を調べていて気が付いたのですが、S3 の新機能かと思いきや、名前空間では別扱いなのでいつもの S3 の権限ではダメでした。